package br.com.sgc.session;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import br.com.sgc.dao.PacientePessoaDao;
import br.com.sgc.dao.PessoaFisicaDao;
import br.com.sgc.entities.geral.PacientePessoa;
import br.com.sgc.entities.geral.Pessoa;
import br.com.sgc.entities.geral.PessoaFisica;
import br.com.sgc.exception.ValidacaoException;
import br.com.sgc.helper.ValidadorCNPJCPFUtil;

@Stateless
public class PacientePessoaSession extends GenericSession<PacientePessoa> {

	private static final long serialVersionUID = -7030878575204519929L;
	
	@EJB private PacientePessoaDao dao;
	@EJB private PessoaFisicaDao pessoaFisicaDao;
	@EJB private EnderecoSession enderecoSession;
	@EJB private TelefoneSession telefoneSession;
	
	public PacientePessoa findByCPF(String documento, Long idClinica){
		Pessoa pessoaDB = null;
		PacientePessoa paciente = new PacientePessoa();
		pessoaDB = pessoaFisicaDao.checkDocumentoPF(documento, idClinica);
		if(pessoaDB == null){
			pessoaDB = new PessoaFisica();
			paciente.getPessoa().setCpf(documento);
		} else {
		
			PessoaFisica pf = (PessoaFisica) pessoaDB;
			paciente.getPessoa().setCpf(pf.getCpf());
			paciente.getPessoa().setDataNascimento(pf.getDataNascimento());
			paciente.setId(pf.getId());
			paciente.getPessoa().setAtivo(pf.getAtivo());
			paciente.getPessoa().setEnderecos(enderecoSession.getEnderecosPersistent(pf.getEnderecos()));
			paciente.getPessoa().setTelefones(telefoneSession.getTelefonesPersistent(pf.getTelefones()));
			paciente.getPessoa().setNome(pf.getNome());
			paciente.getPessoa().setRg(pf.getRg());
			paciente.getPessoa().setSexo(pf.getSexo());

		}
		
		return paciente;
	}
	
	public void validarCPF(String cpf) throws ValidacaoException {
		String erro = "";
		if (cpf == null || cpf.trim().equals("")) {
			erro +="Campo CPF precisa ser preenchido! <br />";
		} else if (!ValidadorCNPJCPFUtil.isCPFValido(cpf)) {
			erro +="O CPF informado � inv�lido! <br />";
		}
		if (erro != "") {
			throw new ValidacaoException(erro);
		}
	}
	
	
	
	public void validar(PacientePessoa t) throws ValidacaoException {
		String erro = "";
		if (t.getPessoa().getCpf() == null || t.getPessoa().getCpf().trim().equals("")) {
			erro +="Campo CPF precisa ser preenchido! ";
		} else if (!ValidadorCNPJCPFUtil.isCPFValido(t.getPessoa().getCpf())) {
			erro +="O CPF informado � inv�lido! ";
		} else {
			PessoaFisica pessoa = findByCPF(t.getPessoa().getCpf(), t.getPessoa().getClinica().getId()).getPessoa();
			if (pessoa.getId() != null && (t.getId() == null || t.getId() != null && t.getId() != pessoa.getId())) {
				erro +="J� existe uma pessoa cadastrada com esse CPF! ";
			}
		}
		if(t.getPessoa().getNome().isEmpty()){
			erro +="Campo Nome precisa ser Preenchido! ";
		}
		if(t.getPessoa().getDataNascimento() == null){
			erro +="Campo Data de Nascimento precisa ser Preenchido! ";
		}
		if(t.getPessoa().getEnderecos().isEmpty()){
			erro +="� necess�rio que exista pelo menos um Endere�o adicionado! ";
		}
		if(t.getPessoa().getSexo() == null){
			erro +="Campo Sexo precisa ser Selecionado! ";
		}
		if(t.getPessoa().getTelefones().isEmpty()){
			erro +="� necessario que exista pelo menos um Telefone adicionado!";
		}
		
		if(t.getPlanoSaude() == null || t.getPlanoSaude().getId() == 0){
			t.setPlanoSaude(null);
		}
		
		if(!erro.isEmpty()){
			throw new ValidacaoException(erro);
		}
	}

	public PacientePessoa findPacienteByPessoaId(Long id) {
		return dao.findPacienteByPessoaId(id);
	}
	
}
